package String.easy;

/**
 * 1. 问题描述
 *      给你一个由大小写英文字母组成的字符串 s 。
 *      一个整理好的字符串中，两个相邻字符 s[i] 和 s[i+1]，其中 0<= i <= s.length-2 ，要满足如下条件:
 *      若 s[i] 是小写字符，则 s[i+1] 不可以是相同的大写字符。
 *      若 s[i] 是大写字符，则 s[i+1] 不可以是相同的小写字符。
 *      请你将字符串整理好，每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除，直到字符串整理好为止。
 *      请返回整理好的 字符串 。题目保证在给出的约束条件下，测试样例对应的答案是唯一的。
 *      注意：空字符串也属于整理好的字符串，尽管其中没有任何字符。
 * 2. 算法分析
 *      1. 采用回溯的方法
 *          我们定义一个单指针初始化该指针指向字符串的头部，此时我们开始遍历s
 *              如果当前的 s.charAt(i) - s.charAt(i+1) == 32/-32 说明此时我们需要
 *              删除s[i]s[i+1]，删除之后会得到一个新的字符串，让指针i回溯到0，对新的字符串
 *              接着上述的方式进行，直到字符串成为一个Good String
 *      2.
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class 整理字符串 {
    public static void main(String[] args) {
        System.out.println('a' ^ 'A');
        System.out.println('a' - 'A');
    }

    public static String makeGood(String s) {
        StringBuilder builder = new StringBuilder(s);
        int i = 0;
        while (i < builder.length() - 1) {
            if (builder.charAt(i) - builder.charAt(i+1) == 32 || builder.charAt(i) - builder.charAt(i+1) == -32) {
                builder.delete(i,i+2);
                i = 0;
            } else {
                i++;
            }
        }
        return builder.toString();
    }
}
